package com.ljx.offer;

import org.junit.Test;

import java.util.HashMap;
import java.util.HashSet;

/**
 * @author 李捷禧
 * Date: 2023/3/31
 * ClassName: C_48
 */

public class C_48 {
    /**
     * 优化
     * 使用hash表来记录
     * getOrDefault这个方法是，当hashMap中有相应的key时，返回旧的value
     * 否则就返回默认设置的 -1
     * @param s
     * @return
     */
    public int lengthOfLongestSubstring(String s) {
        HashMap<Character, Integer> hashMap = new HashMap<>();
        int max = 0;
        int t = 0;
        for (int i = 0; i < s.length(); i++) {
            int j = hashMap.getOrDefault(s.charAt(i),-1);
            hashMap.put(s.charAt(i),i);
            t = t < i -j ? t + 1 : i - j;
            max = Math.max(max,t);
        }
        return max;
    }

    /**
     * 自己使用暴力解法
     * @param s
     * @return
     */
    public int lengthOfLongestSubstring1(String s) {
        char[] res = s.toCharArray();
        if (res.length == 0) return 0;
        HashSet<Character> set = new HashSet<>();
        int num = 0;
        int max = 0;
        for (int i = 0; i < res.length; i++) {
            while (set.contains(res[i])){
                set.remove(res[num++]);
            }
            set.add(res[i]);
            max = Math.max(max,set.size());
        }
        return max;
    }

    @Test
    public void test(){
        String str = "bbspsjb";
        System.out.println(lengthOfLongestSubstring(str));
    }
}